﻿

var _this = this;


$(document).ready(function() {
	var rId = $('#rId').attr('value');
	
	// 버튼을 등록한다.
	$('#confirm').click(confirm);
	
	
//	fillData('20120511002');
	fillData(rId);
//	_this.table1 = tableSync('tbl1');
	
});

function confirm(){
	window.close();
}


function fillData(rId){
	var url = 'action/previewAction.json';
	var param={'rId':rId};
	logs('fillData rId='+rId);
	
	// rId를 가지고 DB에 접근하여
	// 질문과 답변들을 가지고 온다.
	
	$.post(url, param, function(dat){
		// 가지고 온 데이타를 _this.dat에 deep copy를 해서 저장해 둔다.
		
		_this.dat = jQuery.extend(true, {}, dat.dat);

//		logs(JSON.stringify(dat.dat));
//		logs(JSON.stringify(dat.dat.main));
		makeSync(dat.dat);
		
		
		// 화면 구성이 끝나면 화면을 보여준다.
		$('#wrap').show();
	});
}

function makeSync(dat){
	
//	logs(JSON.stringify(dat.main));
	
	// 설문지 제목을 넣는다.
	$('#rContent').setterInput(dat.main.rContent);
	logs('length = '+dat.list_question.length);
	
	// 질문 갯수 만큼 질문 테이블을 만들어 준다.
	copyTrTag(dat.list_question);
	
	// 위에서 완성된 테이블에 각 답변 테이블을 만들고
	// 질문과 답변에 데이타를 넣는다.
	fillTableData(dat);
}

function fillTableData(dat){
	var body = $('#tbl1 > tbody');
	var q_list = dat.list_question;
	var a_list = dat.list_answer;
	
	logs('fillTableData');
//	logs(JSON.stringify(q_list));
	
	// 질문 갯수 만큼 루프를 돈다.
	$(body).children().each(function(index){
		var tr = this;
//		logs(tr);
		
		//질문 번호 등록
		$(tr).find('#qSeq').setterInput(q_list[index].qSeq);
		// 질문 등록
		$(tr).find('#qContent').setterInput(q_list[index].qContext);
		
		// 주관식이면 답변을 주관식으로 보이게 끔 한다.
		if(q_list[index].answerToggle==1){
			$(tr).find('#answerToggle').setterInput(1);
			$(tr).answerToggle(1);
		}
		
		// 각 질문의 대답에 관한 테이블을 만들어 준다.
		copyDivAnswer(tr, a_list);
	});
	
	try{
		// copyDivAnswer 에서 a_list의 내용이 삭제 되었으므로
		// 저장해 놓은 데이타를 deep Copy 한다.
		a_list = {};	// 초기화
		a_list = jQuery.extend(true, {}, _this.dat.list_answer);	//deep copy
	}catch(e){
		errLog('error ');
	}
	logs('=======================');
	$(body).children().each(function(index){
		var tr = this;
//		logs(tr);
		
		// 각 질문에 데이타를 넣는다.
		fillAnswerData($(tr).find('#radio_area'), $(tr).find('#qSeq').attr('value'),  a_list);
	});
}


/**
 * 
 * @param tr 해당 tr
 * @param valueNumber	질문 번호
 * @param a_list	답변 데이타
 */
function fillAnswerData(tr, valueNumber, a_list){
	var string = valueNumber;
	logs('fillAnswerData string  = '+string);

	var count=0;
	for(a in a_list){
		var item = a_list[a];
//		logs('item.qSeq = '+item.qSeq);
		
		// 각 질문 번호에 맞는 답변 데이타를 넣기 위해서 질문 번호를 확인한다.
		if(item.qSeq==string){
			$(tr).find('input').each(function(index){
				index = index - index%2;
				logs('index = '+index);
//				logs($(this));
				logs('count = '+count+', index/2 = '+index/2);
				if(count == index/2){
					var name;
					var value;
					if($(this).attr('type')=='radio'){
						name = 'ansRadioId'+valueNumber;
						value = index/2;
					}else{
						name = string;
						value = item.aContext;
					};
					$(this).attr('id', name);
					$(this).attr('name', name);
					$(this).attr('value', value);	
				}
			});
			count++;
		}
	}
	
	removeItemInJson(string, a_list);
}

/**
 * 각 질문에 답변을 tr을 추가한다.
 * @param tr
 * @param a_list
 */
function copyDivAnswer(tr, a_list){
	var valueNumber = $(tr).find('#qSeq').attr('value');
	var string = valueNumber;
	var count = 0;
	
	logs('copyDivAnswer');
//	logs(JSON.stringify(a_list));
	
	
	for(var i=0;i<a_list.length;i++){
//		logs('a_list[i].qSeq = '+a_list[i].qSeq);
		if(a_list[i].qSeq==valueNumber){
			count++;
		}
	}
	logs('valueNumber = '+valueNumber);
	logs('count = '+count);
	var body = $(tr).find('#radio_area');
	logs(body);
	var html = $(body).first().html();
	logs(html);
	while(--count){
		$(body).append(html);
	}
	
	// 효율적인 코딩을 위하여 
	// JSON 데이타에서 사용한 내용을 삭제한다.
	removeItemInJson(string, a_list);
	
	
}

function removeItemInJson(string, a_list){
	logs('removeItemInJson string = '+string);
	logs(typeof a_list.length);
	if(typeof a_list.length == 'undefined'){
		for(a in a_list){
			try{
//				logs('ori = '+a_list[a].aSeq);
				// 만약 사용된 내용이면
				// 데이타를 삭제하고 이 함수를 재귀적으로 호출한다.
				// 삭제할 경우 데이타의 위치가 바뀌므로 재귀적으로 하는 것이 낫다.
				if(a_list[a].qSeq==string){
					delete a_list[a];
					removeItemInJson(string, a_list);
					break;
				}	
			}catch(e){
				logs(e);
			}
		}
	}else{
//		logs('removeItemInJson list length = '+a_list.length);
		for(var i=0;i<a_list.length;i++){
			try{
//			logs('ori = '+a_list[i].qSeq);
			if(a_list[i].qSeq==string){
				a_list.splice(i,1);
				removeItemInJson(string, a_list);
				break;
			}
			}catch(e){
				logs(e);
			}
		}	
	}
	
}


jQuery.fn.answerToggle = function( val){
	logs('answerToggle val = '+val);
	if(val==0){
		$(this).find('#multi').show();
		$(this).find('#writing').hide();
	}else if(val==1){
		$(this).find('#multi').hide();
		$(this).find('#writing').show();
	}
};

// 질문 갯수 만큼 질문 테이블을 만들어 준다.
function copyTrTag(list){
	var length = list.length;
	var body = $('#tbl1 > tbody');
	var trHtml = '<tr></tr>';
	trHtml = $(body).children().last().html();
	
	while(--length){
		$(body).append('<tr>'+trHtml+'</tr>');
	}
}

jQuery.fn.setterInput = function( val){
	
	$(this).attr('value', val);
//	logs($(this));
	logs('setterInput 112 id = '+', value = '+$(this).attr('value'));
};

function errLog(e){
	console.log(e);
}

function logs(e){
	errLog(e);
}